package misListasDobles;

public class ListasDobles {
	
	private NodeDoble inicio;
	
	public ListasDobles(){
		
		inicio = null;
	}
	
	public NodeDoble getInicio(){
		
		return inicio;
	}
	
	public void setInicio(NodeDoble valor){
		inicio = valor;
	}
	
	public boolean listaVacia(){
		
		return (inicio == null);  
	}
	
	public void agregarInicio(String valor){
		NodeDoble nodeNew = new NodeDoble(valor,inicio,null);
		
		if (! listaVacia())
		{
			inicio.setBack(nodeNew);
		}
		
		setInicio(nodeNew);
		
	}
	
	public void agregarFinal(String valor){
		NodeDoble NodePtr;
		NodeDoble nodoNew;
		
		if (size()==0) agregarInicio(valor);
		{
			NodePtr=inicio;
			
			while(NodePtr.getNext()!=null)
			{
				NodePtr=NodePtr.getNext();
			}
			
			nodoNew = new NodeDoble(valor,null,NodePtr);
			NodePtr.setNext(nodoNew);
		}
		
		
	}
	
	public String borrarInicio(){
		String valor = "";
		
		if (size()==0) valor="LISTA VACIA";
		else
			if (size()==1)
			{
				valor=inicio.getData();
				inicio=null;
			}
			else
			{
				valor=inicio.getData();
				inicio.getNext().setBack(null);
				inicio=inicio.getNext();
			}
		return valor;
	}
	
	public String borrarFinal(){
			  
	  	NodeDoble NodePtr;
	  	String valor;
	  	
	  	if (size()==0) valor ="LISTA VACIA";
	  	else
	  		if (size()==1) {
	  			valor = inicio.getData();
	  			inicio=null;
	  		}
	  		else
	  		{
	  			NodePtr=inicio;
	  			while (NodePtr.getNext().getNext() != null)
	  			{
	  				NodePtr=NodePtr.getNext();
	  			}
	  			
	  			valor=NodePtr.getNext().getData();
	  			NodePtr.setNext(null);
	  		}
		
	  	return valor;
	}
	
	public int size(){
		
		int total = 0;
		NodeDoble NodePtr;
		
		NodePtr=inicio;
		
		while (NodePtr!=null)
		{
			NodePtr = NodePtr.getNext();
			total++;
		}
		return total;
	}
	
	public String toString(){
	  
	  NodeDoble NodePtr;
	  String    Lista;
	  
	  NodePtr=inicio;
	  Lista  ="";
	  
	  while (NodePtr != null)
	  {
		  Lista+=NodePtr.getData()+"->";
		  NodePtr=NodePtr.getNext();
	  }
	  
	  Lista+="NULL";
	  return Lista;
	}
}